package com.types;

import java.lang.reflect.Constructor;

public class ObjectTypeCreate {
	
	public ObjectTypeCreate() {
		// TODO 一个无参构造
	}
	public ObjectTypeCreate(int a) {
		// TODO 有一个int类型等参数构造
		System.out.println("a="+a);
	}
	
	/* 
	 * 一个对象类型 在数据转换时候,需要确定你是通过何种方式创建
	 * 在java中一般情况通过 new Object()这个对象来实现。
	 * 在以后等开发中会遇到通过反射来创建对象。
	 * 我们都知道对象创建时候会有构造方法，那么在反射创建时候也一样可以选择使用等构造
	 * 如果在反射创建一个对象不选用构造时候，默认使用无参数构造，这个时候必须保证类定义时候有无参构造
	 */
	
	public void createBaseObject(){
		// 常规等对象创建,无参构造创建对象
		ObjectTypeCreate obj_1 = new ObjectTypeCreate();
		// 通过有一个int参数构造创建对象
		ObjectTypeCreate obj_2 = new ObjectTypeCreate(100);
	}
	
	public void reflectCreateObject()throws Exception{
		// 1 通过已知类创建
		Class<ObjectTypeCreate> clazz_1 = ObjectTypeCreate.class;
		ObjectTypeCreate obj_1 = clazz_1.newInstance();	// 当前未选择构造方法,则模式使用无参构造
		
		// 2 通过已知类路径创建，当转换当类路径不存在或者与类型泛型不匹配时会发生相关异常，可以捕获
		Class<ObjectTypeCreate> clazz_2 = (Class<ObjectTypeCreate>) Class.forName("com.types.ObjectTypeCreate");
		ObjectTypeCreate obj_2 = clazz_2.newInstance();
		
		// 3 通过选择构造，目前我们拥有一个 为int类型参数构造
		Constructor<ObjectTypeCreate> constructor = clazz_1.getDeclaredConstructor(int.class);
		ObjectTypeCreate obj_3 = constructor.newInstance(100);// 传入型参值
	}
}
